|
Date :...........................................17
et 28 mai 1991 Protection : ..................................MOT DE PASSE Programme : ......................................4D BOXING Outils : ......................................SOFT-ICE V2.50a Fichier : ................................................LOAD.EXE Temps passé : ........................12 HEURES environ... Société :........................................... MINDSCAPE Divers : .....Premier emploi du débuggeur SOFT-ICE. Origine : ............................................................B.Y. Numéro : ...........................................................076 |
Avant de commencer je passe tous les *.EXE à l'UNPACK de MS et celui de FB. LOAD.EXE était compacté avec EXEPACK de MS et curieusement retrouve une taille inférieure à celle qu'il a lorsqu'il est compacté !
Cinq points pour SOFT-ICE:
a- Il apparaît à chaque sollicitation que l'on se trouve au fond de WINDOWS ou d'un autre graphisme VGA/EGA/CGA/TEXT. ( pas le cas de PERISCOPE V2.11 )
b- Aucune perte d'image lors d'un retour de SOFT-ICE vers le programme. ( pas le cas de PERISCOPE V2.11 )
c- Tous les points d'arrêts sont exécutés sans problème en FULL SPEED. ( pas le cas de PERISCOPE V2.11 )
d- Se place lors de l'installation tout en haut de la mémoire ce qui fait que le programme à débugger est chargé à son CS:IP normal. ( pas le cas de PERISCOPE V2.11 )
e- Permet d'être appelé par une NMI ( ma carte PANO ). En fait TD de BORLAND a aussi cette possibilité.
Avec toutefois deux inconvénients:
a- Ne permet pas de BREAK POINT sur les REGISTRES. ( a moins que je ne sache pas lire la doc ! )
b- Ne permet pas de rediriger la sortie écran dans un fichier.
Donc avec SOFT-ICE le programme se déroule normalement. ( impossible de charger 4D BOXING avec PERISCOPE ) et on trouve cette chaîne codée dans laquelle il suffit d'inverser le saut 750B en 740B:
83C404 0BC0 750B ----> à modifier par 740B ou 9090 C70610
Cette chaîne étant codée je pars à la recherche de mon 0B que je veux transformer en 00.
Il se trouve dans le fichier EGA.CMN en 090B101216181E26. Je le modifie et tout se plante. C'est curieux cette incrémentation des octets à cet endroit...
J'essaie autre chose; il suffit que AX soit égal à 0000 lors du test. Je remonte en amont et je place dans une sous-routine XOR AX,AX. Cela se plante aussi...
Fichier LOAD.EXE; 74d4 1AC0 1CFF ---> 33C0 XOR AX,AX 98 8BF2
Alors que la modif faite "ON LINE" le soft tourne. Il y a donc un test plus loin ou autre chose...
Je vais essayer de pousser SOFT-ICE dans ces limites pour voir ce qu'il est capable de faire.
28 mai 1991
Le fichier EGA.CNM semble être compacté. ( aucune répétition de caractère ) Je place SOFT-ICE en arrêt sur adresse à l'écriture de mon 75.
BPM 21B4:1BE9 W EQ 75
Et SOFT-ICE s'y arrête à tout les coups. On se trouve dans la routine qui mets en place la sous-routine de demande du mot de passe avec un STORB: Le STORB pointe sur ES:DI qui est égal à 1C73:6FF9 ce qui est bien égal à 21B4:1BE9 ! L'idée est de faire comme avec FINAL ORBIT c'est à dire greffer un peu de code qui teste la valeur en ES:DI et qui décrémente de 1 si la case mémoire correspondante est égale à 75. Car cette position corrigée avec 74 fait fonctionner le SOFT sans mot de passe.
Routine de codage originale:
771C:02AD 3ACC CMP CL,AH 771C:02AF 7E0B JLE 02BC 771C:02B1 86CC XCHG CL,AH 771C:02B3 D3C2 ROL DX,CL 771C:02B5 86CC XCHG CL,AH 771C:02B7 2ACC SUB CL,AH
Routine modifiée:
Le NOP après le JMP sert à réaligner le nombre d'octet en ne modifiant pas le code qui suit.
771C:02AD 3ACC CMP CL,AH 771C:02AF 7E0B JLE 02BC 771C:02B1 E9EC35 JMP 38A0 771C:02B4 90 NOP 771C:02B5 86CC XCHG CL,AH 771C:02B7 2ACC SUB CL,AH
Je passe énormément de temps pour trouver une zone du programme qui représente du texte et qui n'est pas altérée par la suite. Je me fais bien sur piéger par le fait que la routine écrit deux fois les mêmes caractères dans la même position mais entre les deux le programme à utilisé les positions que j'avais repérées.
Finalement je trouve quelque chose qui semble rester du début jusqu'à la demande du mot de passe. C'est une suite de 00 puis du texte correspondant au compilateur MICROSOFT. Il n'y a aucune raison que ceci soit utilisé.
Deux erreurs d'écriture de mon mini-code me font encore une fois perdre un temps fou: comme je veux modifier la position ES:DI je teste évidement cette position ce qui fait que j'altère les FLAGS ! Je dois donc commencer par les sauver sur la pile et les restaurer dès la fin de mon action. Deuxième erreur: comme je teste la position ES:DI et non pas ES:6FF9 il se produit la chose suivante; d'autre 75 apparaissent pour des valeurs de DI autres que 6FF9 et qu'automatiquement je transforme en 74 !!! donc plantage assuré.
IP: 38A0 9C PUSHF ; sauvegarde des FLAGS. 38A1 26803EF96F75 CMP BYTE ES:6FF9,75 ; ( es: = 21B4 ) 38A7 7505 ÉÍ< JNZ 38AE ; si pas d'égalité on º ; saute la décrémentation. 38A9 26FE0EF96F º DEC BYTE ES:6FF9 ; on décrémente ES:6FF9 de 1. 38AE 9D <ͼ POPF ; restaure les FLAGS. 38AF 86CC XCHG CL,AH ; je remets les instructions ; qui ont du être déplacées ; l'insertion de mon JMP. 38B1 D3C2 ROL DX,CL 38B3 E9FFC9 JMP 02B5 ÍÍÍÍÍÍÍÍÍ>; retour à 02B5.
Avec PCTOOLS chercher la chaîne 3ACC7E0B86CCD3C2 et modifier comme suit: 3ACC7E0BE9EC3590 sans oublier de décompacter le fichier LOAD.EXE avant avec l'utilitaire de FABRICE BELLARD: UPACKEXE.
Puis chercher en SL 41 DEP 400 ( décimal ) et y placer:
9C26803EF96F75750526FE0EF96F9D86CCD3C2E9FFC9
Cette modif. fonctionne en EGA et VGA.
21 novembre 1991
N'ayant pas sauvegardé le fichier LOAD.EXE modifié, j'ai eu un mal de chien pour refaire ce patch car je m'étais trompé dans la rédaction des chaînes d'octets. Impossible de repasser avec SOFT-ICE par l'endroit que je venais de modifier à l'aide de PCTOOLS. Il existe pourtant une méthode infaillible pour appeler un débuggeur quel qu'il soit à un endroit donné. Il suffit d'inclure au début de la chaîne un octet CC. Il faut bien sur prendre garde de le placer après ou avant une instruction et non pas au milieu.
PERISCOPE s'arrête automatiquement tandis que SOFT-ICE doit être mis en BPINT 3.
FREDDY